using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/4/2013 5:46:44 PM
    /// </summary>
    [Serializable]
    public class FaseAuditoriaCumplimientoLista : ReadOnlyListBase<FaseAuditoriaCumplimientoLista, FaseAuditoriaCumplimientoInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(FaseAuditoriaCumplimientoLista), "Role");
        }

        #endregion

        #region Factory Methods
        /// <summary>
        /// Obtiene un listado de fases de licenciamiento de auditoria
        /// </summary>
        /// <returns></returns>
        public static FaseAuditoriaCumplimientoLista GetFaseAuditoriaCumplimientoLista()
        {
            return DataPortal.Fetch<FaseAuditoriaCumplimientoLista>();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="fac_id">Id fase de auditoria de cumplimiento</param>
        /// <returns></returns>
        public static FaseAuditoriaCumplimientoLista GetFaseAuditoriaCumplimientoLista(Guid fac_id)
        {
            return DataPortal.Fetch<FaseAuditoriaCumplimientoLista>(fac_id);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="idAuditoriaCumplimiento">id auditoria de cumplimiento</param>
        /// <returns></returns>
        public static FaseAuditoriaCumplimientoLista GetFaseAuditoriaCumplimientoLista(string idAuditoriaCumplimiento)
        {
            return DataPortal.Fetch<FaseAuditoriaCumplimientoLista>(idAuditoriaCumplimiento);
        }

        private FaseAuditoriaCumplimientoLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access
        private void DataPortal_Fetch(Guid criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_fac_id",  criteria.ToString())
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_FASES_AUDITORIA\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(FaseAuditoriaCumplimientoInfo.GetFaseAuditoriaCumplimientoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        private void DataPortal_Fetch(string criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_acu_id",  criteria)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_FASES_AUD_CUM\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(FaseAuditoriaCumplimientoInfo.GetFaseAuditoriaCumplimientoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        private void DataPortal_Fetch()
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_tipo","AUDITORIA")
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_FASES\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(FaseAuditoriaCumplimientoInfo.GetFaseAuditoriaCumplimientoInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: Luis Cuenca
    /// Fecha: 6/4/2013 5:46:44 PM
    /// </summary>
    [Serializable]
    public class FaseAuditoriaCumplimientoInfo : ReadOnlyBase<FaseAuditoriaCumplimientoInfo>
    {
      
        #region Business Methods
        public Guid Id { get; internal set; }
        public Guid IdAuditoriaCump { get; internal set; }
        public Guid FaseId { get; internal set; }
        public string NombreFase { get; internal set; }
        public string CodigoFase { get; internal set; }
        public string EstadoFase { get; internal set; }
        public DateTime FechaInicio { get; internal set; }
        public DateTime FechaFin { get; internal set; }
        public int Orden { get; internal set; }
        public string UrlFase { get; internal set; }
        
        #endregion

        #region Factory Methods

        internal static FaseAuditoriaCumplimientoInfo GetFaseAuditoriaCumplimientoInfo(DataRow childData)
        {
            return DataPortal.FetchChild<FaseAuditoriaCumplimientoInfo>(childData);
        }

        private FaseAuditoriaCumplimientoInfo()
        { /* require use of factory methods */ }

        public FaseAuditoriaCumplimientoInfo(string id, string nombre,string estado, string codigo, string faseAuditoria)
        {
            this.IdAuditoriaCump =Guid.Parse(faseAuditoria);
            this.FaseId=Guid.Parse(id);
            this.NombreFase = nombre;
            this.CodigoFase = codigo;
            this.EstadoFase = estado;
      
        }


        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {           
            //Datos de tabla auditoria
            if (childData.Table.Columns.Contains("fac_id"))
                Id = Guid.Parse(childData["fac_id"].ToString());
            if (childData.Table.Columns.Contains("fac_estado"))
             EstadoFase = childData["fac_estado"].ToString();
            if (childData.Table.Columns.Contains("fac_fecha_inicio"))
                FechaInicio = DateTime.Parse(childData["fac_fecha_inicio"].ToString());
            if (childData.Table.Columns.Contains("fac_fecha_fin"))
                FechaFin = DateTime.Parse(childData["fac_fecha_fin"].ToString());
            if (childData.Table.Columns.Contains("acu_id"))
               IdAuditoriaCump = Guid.Parse(childData["acu_id"].ToString());
            //Datos de fases           
            FaseId = Guid.Parse(childData["fas_id"].ToString());
            NombreFase= childData["fas_nombre"].ToString();
            Orden = int.Parse(childData["fas_orden"].ToString());
            UrlFase = childData["fas_url"].ToString();
            CodigoFase = childData["fas_codigo"].ToString();
        }

        #endregion
    }
}
